﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using DataAccessLayer;
using BusinessLogicLayer;

namespace ChamCong.Admin
{
    public partial class QuanLyMenu : BasePage
    {

        MenuBLL MBLL = new MenuBLL();
        int vCap, vSTT;
        TreeViewState state;
        protected void Page_Load(object sender, EventArgs e)
        {
            
            vCap = Convert.ToInt32(Request.QueryString["Cap"]);
            vSTT = Convert.ToInt32(Request.QueryString["STT"]);
            state = new TreeViewState("MenuState");
            //MenuTrai.Attributes.Add("onclick", this.Page.ClientScript.GetPostBackEventReference(this.cblMenuItemClick_Click, ""));
            if (!Page.IsPostBack)
            {
                Page.SetFocus(tbxTenTrang);
                
                HienThiMenu();
                // Bind dropdownlist
                BindDropdownlist();

                if (vCap > 0 && vSTT > 0)
                {
                    rdbMenu.Items[0].Selected = true;
                    LoadData(vSTT);
                    if (vCap == 2)
	                {
		                //MenuTrai.Nodes[MBLL.LayThongTinMenuItemTheoSTT(vSTT).CapHai.Value].Checked = true;
	                }
                    else if (vCap == 1)
	                {
	                }
                    ddlHienThi.Enabled = true;
                }
                else
                {
                    rdbMenu.Items[1].Selected = true;
                    ddlMenuCapMot.Enabled = false;

                }
                //Response.Write(MenuTrai.Nodes[1].ChildNodes[1].Value);
            }
        }

        void BindDropdownlist()
        {
            List<MENU_TRAI> lstMenu = MBLL.LayDSMenuCapMot();
            ddlMenuCapMot.DataSource = lstMenu;
            ddlMenuCapMot.DataTextField = "TenTrang";
            ddlMenuCapMot.DataValueField = "CapMot";
            ddlMenuCapMot.DataBind();
        }
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            if (CheckError())
            {
                if (rdbMenu.SelectedValue == "0")
                {
                    MENU_TRAI m = new MENU_TRAI();
                    if (ddlLoaiCap.SelectedValue == "1")
                    {
                        m.CapMot = Convert.ToInt32(tbxViTri.Text.Trim());
                        m.CapHai = 0;
                    }
                    else
                    {
                        m.CapMot = Convert.ToInt32(ddlMenuCapMot.SelectedValue);
                        m.CapHai = Convert.ToInt32(tbxViTri.Text.Trim());
                    }
                    m.DuongDan = tbxDuongDan.Text.Trim();
                    m.TenTrang = tbxTenTrang.Text.Trim();
                    m.HienThi = int.Parse(ddlHienThi.SelectedValue);
                    if (MBLL.ktMenuItemTonTai(m.CapMot, m.CapHai))
                    {
                        MBLL.ThemMenuItem(m);
                        Session["MenuState"] = null;
                        Response.Redirect("QuanLyMenu.aspx");
                        sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Thêm menu thành công!");
                        
                    }
                    else
                    {
                        //string[] test = MBLL.LayMenuItemCuoi();
                        //Response.Write(test[0] + " - " + test[1]);


                        MENU_TRAI existMenu = MBLL.LayThongTinMenuItemTheoCapMenu(m.CapMot, m.CapHai);
                        string[] lastNewMenuItem = MBLL.LayMenuItemCuoi();
                        if (ddlLoaiCap.SelectedValue == "1")
                        {
                            existMenu.CapMot = Convert.ToInt32(lastNewMenuItem[0]) + 1;
                            existMenu.CapHai = 0;
                        }
                        else
                        {
                            //existMenu.CapMot = Convert.ToInt32(lastNewMenuItem[0]) + 1;
                            existMenu.CapHai = Convert.ToInt32(lastNewMenuItem[1]) + 1;
                        }
                        //existMenu.CapMot = Convert.ToInt32(lastNewMenuItem[0]) + 1;
                        //existMenu.CapHai = Convert.ToInt32(lastNewMenuItem[1]) + 1;
                        MBLL.SuaMenuItem(existMenu);
                        MBLL.ThemMenuItem(m);
                        Session["MenuState"] = null;
                        //sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Vị trí của menu đã tồn tại.");
                    }

                }
            }
        }

        protected void btnDel_Click(object sender, EventArgs e)
        {
            if (QLMenuTrai.CheckedNodes.Count < 1)
            {
                if (vCap > 0 && vSTT > 0)
                {
                    MENU_TRAI m = MBLL.LayThongTinMenuItemTheoSTT(vSTT);
                    if (m != null)
                    {
                        MBLL.XoaMenuItem(m.CapMot, m.CapHai);
                        Session["MenuState"] = null;
                        base.Response.Redirect("QuanLyMenu.aspx");
                        sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Xóa menu thành công!");
                    }
                    else
                    {
                        sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Không tìm thấy thông tin menu nhập vào");
                    }
                } 
            }
            else
            {
                for (int i = 0; i < QLMenuTrai.Nodes.Count; i++)
                {
                    if (QLMenuTrai.Nodes[i].Checked == true)
                    {
                        MBLL.XoaMenuItemCapMot(Convert.ToInt32(QLMenuTrai.Nodes[i].Value));
                    }
                    for (int j = 0; j < QLMenuTrai.Nodes[i].ChildNodes.Count; j++)
                    {
                        if (QLMenuTrai.Nodes[i].ChildNodes[j].Checked == true)
                        {
                            MBLL.XoaMenuItemDaChon(Convert.ToInt32(QLMenuTrai.Nodes[i].ChildNodes[j].Value));
                            Session["MenuState"] = null;
                            base.Response.Redirect("QuanLyMenu.aspx");
                            sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Xóa menu thành công!");
                        }
                    }

                }
            }
            
            
        }

        public void delMenuItem(int _stt)
        {
            MENU_TRAI m = MBLL.LayThongTinMenuItemTheoSTT(_stt);
            if (m.CapHai == 0)
            {
                MBLL.XoaMenuItemDaChon(_stt);
            }
        }


        protected void btnNotSave_Click(object sender, EventArgs e)
        {
            base.Response.Redirect("QuanLyMenu.aspx");
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (CheckError())
            {
                MENU_TRAI menuItem = new MENU_TRAI();
                menuItem.STT = Convert.ToInt32(Request.QueryString["STT"]);
                menuItem.TenTrang = tbxTenTrang.Text.Trim();
                menuItem.DuongDan = tbxDuongDan.Text.Trim();
                if (Request.QueryString["Cap"] == "1")
                {
                    menuItem.CapMot = Convert.ToInt32(tbxViTri.Text.Trim());
                    menuItem.CapHai = 0;
                }
                else if (Request.QueryString["Cap"] == "2")
                {
                    menuItem.CapMot = Convert.ToInt32(ddlMenuCapMot.SelectedValue);
                    menuItem.CapHai = Convert.ToInt32(tbxViTri.Text.Trim());
                }
                menuItem.HienThi = int.Parse(ddlHienThi.SelectedValue);    
                MBLL.SuaMenuItem(menuItem);
                Response.Redirect("QuanLyMenu.aspx");
                sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Lưu thông tin thành công!");
            }
        }

        private bool CheckError()
        {
            if (tbxTenTrang.Text == "")
            {
                sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Vui lòng nhập đầy đủ thông tin.");
                return false;
            }
            if (!(tbxViTri.Text == "") && IsNumeric(tbxViTri.Text))
            {
                return true;
            }
            sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Vui lòng nhập vào thứ tự (là số nguyên dương).");
            return false;
        }

        private void clear()
        {
            tbxTenTrang.Text = "";
            Page.SetFocus(tbxTenTrang);
            txtmenu_description.Text = "";
            tbxDuongDan.Text = "";
            tbxViTri.Text = "";
        }

        void HienThiMenu()
        {
            string strHidden = string.Empty;
            List<MENU_TRAI> Cap1 = MBLL.LayDSMenuCapMot();
            
            foreach (var item in Cap1)
            {
                TreeNode child = new TreeNode(item.TenTrang + " (" + item.CapMot + ")", item.STT.ToString());
                child.NavigateUrl = "QuanLyMenu.aspx?Cap=1&STT=" + item.STT;
                child.ToolTip = item.TenTrang.ToString();
                QLMenuTrai.Nodes.Add(child);
                List<MENU_TRAI> Cap2 = MBLL.LayDSTatCaMenuCapHai((int)item.CapMot);
                foreach (var item2 in Cap2)
                {
                    if (item2.HienThi == 1)
                    {
                        strHidden = "";
                    }
                    else
                    {
                        strHidden = " - Ẩn";
                    }
                    TreeNode child2 = new TreeNode(item2.TenTrang + " (" + item2.CapHai + strHidden + ")", item2.STT.ToString());
                    child2.Value = "QuanLyMenu.aspx?Cap=2&STT=" + item2.STT;
                    child2.ToolTip = item2.TenTrang.ToString();
                    child.ChildNodes.Add(child2); 
                }
            }
            QLMenuTrai.CollapseAll();
            if (state.IsSaved)
            {
                state.RestoreTreeView(QLMenuTrai, "MenuState", HttpContext.Current);
            }
        }

        private bool IsNumeric(string numberString)
        {
            if (numberString == "")
            {
                return false;
            }
            foreach (char ch in numberString)
            {
                if (!char.IsNumber(ch))
                {
                    return false;
                }
            }
            return true;
        }

        private void LoadData(int _STT)
        {
            MENU_TRAI m = MBLL.LayThongTinMenuItemTheoSTT(_STT);
            if (m != null)
            {
                if (m.CapHai == 0)
                {
                    ddlLoaiCap.Items.FindByValue("1").Selected = true;
                    ddlMenuCapMot.Items.FindByValue(m.CapMot.ToString()).Selected = true;
                    ddlMenuCapMot.Enabled = false;
                    tbxViTri.Text = m.CapMot.ToString();
                }
                else
                {
                    ddlLoaiCap.ClearSelection();
                    ddlLoaiCap.Items.FindByValue("2").Selected = true;
                    ddlMenuCapMot.Items.FindByValue(m.CapMot.ToString()).Selected = true;
                    tbxViTri.Text = m.CapHai.ToString();
                }

                tbxTenTrang.Text = m.TenTrang;
                tbxDuongDan.Text = m.DuongDan;
                
                if (m.HienThi == 1)
                {
                    ddlHienThi.Items[0].Selected = true;
                }
                else
                {
                    ddlHienThi.Items[1].Selected = true;
                }
                setButton(false);
            }
            else
            {
                sbcMsgBox1.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Không tìm thấy thông tin menu nhập vào");
            }

        }

        protected void rdbMenu_SelectedIndexChanged(object sender, EventArgs e)
        {
            //if (MenuTrai.SelectedNode != null)
            //{
                if (rdbMenu.SelectedValue == "0")
                {
                    clear();
                    ddlMenuCapMot.Enabled = false;
                    setButton(true);
                }
                else if (rdbMenu.SelectedValue == "2")
                {
                    setButton(false);
                    LoadData(Convert.ToInt32(Request.QueryString["STT"]));
                }
            //}
        }

        private void setButton(bool _flag)
        {
            btnAdd.Visible = _flag;
            btnNotSave.Visible = !_flag;
            btnSave.Visible = !_flag;
            btnDel.Visible = !_flag;
        }

        protected void ddlLoaiCap_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlLoaiCap.SelectedValue == "1")
            {
                if (rdbMenu.SelectedValue == "0")
                {
                    ddlHienThi.Enabled = false;    
                }
                
                clear();
                ddlHienThi.Enabled = false;    
            }
            else
            {
                if (ddlLoaiCap.SelectedValue == "2")
                {
                    ddlHienThi.Enabled = true;
                    ddlMenuCapMot.Enabled = true;
                }
                
                
            }
        }

        protected void MenuTrai_SelectedNodeChanged(object sender, EventArgs e)
        {
            if (QLMenuTrai.SelectedNode.Depth == 1)
            {
                state.SaveTreeView(QLMenuTrai, "MenuState", HttpContext.Current);
                Response.Redirect(QLMenuTrai.SelectedNode.Value);
            }
        }
    }
}